package com.example.servlet;

import com.example.domain.Users;
import com.example.dao.UserDao;
import com.example.dao.imp.UserDaoImp;
import com.example.utils.CookieUtils;
import org.apache.commons.lang3.ObjectUtils;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet(name = "/loginServlet", value = "/login")
public class LoginServlet extends HttpServlet {
    private static final int COOKIE_MAX_AGE = 30 * 24 * 60 * 60; // 30天
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String errorMessage = "";
        // 校验验证码是否正确
        // 获取用户提交的验证码
        String userInputCaptcha = request.getParameter("captcha");
        // 从会话中获取生成的验证码
        HttpSession session = request.getSession();
        String generatedCaptcha = (String) session.getAttribute("captcha");
        // 如果校验通过
        if (userInputCaptcha != null && userInputCaptcha.equals(generatedCaptcha)) {
            // 变量用于存储错误信息
            errorMessage = "";
            // 获取登录表单提交的用户名、密码和角色
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            int role = Integer.parseInt(request.getParameter("role"));

            // 判断是否选择了30天免登录
            boolean isLoginFree = Boolean.parseBoolean(request.getParameter("isLoginFree"));

            UserDao userDao = new UserDaoImp();
            // 查询用户
            Users user = userDao.getUserByUsernamePasswordAndRole(username, password, role);
            // 如果选择了30天免登录，生成记住我Token并设置Cookie
            if (isLoginFree) {
                // 生成Token并设置Cookie，这部分代码根据具体需求实现
                String rememberMeToken = String.valueOf(user.getId());
                // 设置Cookie
                Cookie cookie = new Cookie("rememberMeToken", rememberMeToken);
                cookie.setMaxAge(30 * 24 * 60 * 60); // 设置Cookie的有效期为30天
                cookie.setPath("/"); // 设置Cookie的路径
                response.addCookie(cookie);
            }

            if (ObjectUtils.isNotEmpty(user)) {
                // 用户信息存入session，用于登录后的其它请求校验使用，避免被authFilter过滤器拦截。
                session.setAttribute("user", user);
                // 登录成功，根据角色重定向到不同的页面
                if (role == 0) {
                    // 学生用户，重定向到学生首页
                    response.sendRedirect("userIndex.jsp");
                } else if (role == 1) {
                    // 管理员用户，重定向到管理员首页
                    response.sendRedirect("adminIndex.jsp");
                } else {
                    // 未知角色，重定向回登录页面
                    response.sendRedirect("login.jsp");
                }
            } else {
                // 登录失败，重新回到登录页面
                errorMessage = "登录失败，用户名或密码不存在。";
                request.setAttribute("errorMessage", errorMessage);
                request.getRequestDispatcher("login.jsp").forward(request, response);
            }
        } else {
            // 验证码错误，重新回到登录页面
            errorMessage = "验证码错误，请重新输入。";
            request.setAttribute("errorMessage", errorMessage);
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }


    //30天免登录token
    private String generateRememberMeToken() {
        return "random-token-" + System.currentTimeMillis();
    }
}
